
package stack;

/**
 * Exercise 2.3
 * @param <T1> 
 * @author Katrin Baryshnikova
 */
public class Stack<T1> {
    private int maxSize;    //  Размер стека
    private T1[] stackArray;
    private int top;        // вершина стека
    
    /**
     * Конструктор - устанавливает размер массива стека, создает массив
     * @param s размер стека
     */
    public Stack(int s) {
        maxSize = s;
        stackArray = (T1[]) new Object[maxSize];
        top = -1;
    }    
    /**
     * Помещает данные на вершину стека и смещает указатель на вершину стека
     * @param j 
     */
    public void push(T1 j) {
        stackArray[++top] = j;
    }    
    /**
     * Возвращает данные с вершины стека и смещает указатель на вершину стека
     * @return 
     */
    public T1 pop() {
        return stackArray[top--];
    }    
    /**
     * Возвращает данные с вершины стека
     * @return 
     */
    public T1 peek() {
        return stackArray[top];
    }
    /**
     * Проверяет стек на пустоту
     * @return true - если стек пуст, false - если стек не пуст
     */
    public boolean isEmpty() {
        return (top == -1);
    }    
    /**
     * Проверяет стек на полноту
     * @return true - если стек полон, false - если стек не полон
     */
    public boolean isFull() {
        return (top == maxSize-1);
    }
    /**
     * Печатает стек на экран
     */
    public void showStackArray() {
        for(T1 t:stackArray)
            System.out.print(t+" ");
        System.out.println();
    }
}
